// PART OF THE MACHINE SIMULATION. DO NOT CHANGE.

package nachos.machine;

/**
 * A read-only <tt>OpenFile</tt> backed by a byte array.
 */
public class ArrayFile extends OpenFileWithPosition
{
    /**
     * Allocate a new <tt>ArrayFile</tt>.
     *
     * @param    array    the array backing this file.
     */
    public ArrayFile(byte[] array)
    {
        this.array = array;
    }

    public int length()
    {
        return array.length;
    }

    public void close()
    {
        array = null;
    }

    public int read(int position, byte[] buf, int offset, int length)
    {
        Lib.assertTrue(offset >= 0 && length >= 0 && offset + length <= buf.length);

        if (position < 0 || position >= array.length)
            return 0;

        length = Math.min(length, array.length - position);
        System.arraycopy(array, position, buf, offset, length);

        return length;
    }

    public int write(int position, byte[] buf, int offset, int length)
    {
        return 0;
    }

    private byte[] array;
}

